﻿//////////////////////////////////////////////////////////////////////////////
//
// Copyright © 1998-2024 Glodon Company Limited.
//
// Licensed under the MIT License
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the “Software”),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//////////////////////////////////////////////////////////////////////////////
#include "ControlDefinitionChangeEventArgs.h"
#include "IControlDefinition.h"
#include "IControlDefinitionChangeEvent.h"
#include "EnableCompileWarning_The_LAST_IncludeInCpp.h"

namespace gcmp
{

ControlDefinitionChangeEventArgs::ControlDefinitionChangeEventArgs(ControlDefinitionChangeEventType type)
    : m_type(type)
    , m_deleteOrInsertControlDefinitionIndex(-1)
    //, m_isChangeByUser(false)
{
}

ControlDefinitionChangeEventArgs::~ControlDefinitionChangeEventArgs()
{
}

const IEvent* ControlDefinitionChangeEventArgs::GetEvent() const
{
    return m_wpEvent.Get();
}

void ControlDefinitionChangeEventArgs::SetEvent(const IEvent* pEvent)
{
    m_wpEvent = pEvent;
}

gcmp::ControlDefinitionChangeEventType ControlDefinitionChangeEventArgs::GetType() const
{
    return m_type;
}

void ControlDefinitionChangeEventArgs::SetControlDefinition(const IControlDefinition* controlDefine)
{
    m_pControlDefinition = controlDefine;
}

const gcmp::IControlDefinition* ControlDefinitionChangeEventArgs::GetControlDefinition() const
{
    return m_pControlDefinition.Get();
}

IControlDefinition * ControlDefinitionChangeEventArgs::GetControlDefinition()
{
    return m_pControlDefinition.Get();
}

void ControlDefinitionChangeEventArgs::SetDeleteOrInsertControlDefinitionIndex(int index)
{
    m_deleteOrInsertControlDefinitionIndex = index;
}

int ControlDefinitionChangeEventArgs::GetDeleteOrInsertControlDefinitionIndex() const
{
    return m_deleteOrInsertControlDefinitionIndex;
}

void ControlDefinitionChangeEventArgs::SetModifyControlDefinitionId(std::wstring id)
{
    m_modifyControlDefinitionId = id;
}

std::wstring ControlDefinitionChangeEventArgs::GetModifyControlDefinitionId() const 
{
    return m_modifyControlDefinitionId;
}

void ControlDefinitionChangeEventArgs::SetComboBoxItemStr(const std::wstring& item)
{
    m_comboBoxItemStr = item;
}

const std::wstring& ControlDefinitionChangeEventArgs::GetComboBoxItemStr() const
{
    return m_comboBoxItemStr;
}

//void ControlDefinitionChangeEventArgs::SetIsChangeByUser(bool isChangeByUser)
//{
//    m_isChangeByUser = isChangeByUser;
//}

bool ControlDefinitionChangeEventArgs::IsChangeByUser() const
{
    // 自己缓存的definition和id靠不住，有可能是空的
    const IControlDefinitionChangeEvent *pEvent = dynamic_cast<const IControlDefinitionChangeEvent*>(GetEvent());
    DBG_WARN_AND_RETURN_FALSE_UNLESS(pEvent, L"pEvent为空",L"GDMPLab",L"2024-03-30");
    IControlDefinition *pDefinition = dynamic_cast<IControlDefinition*>(pEvent->GetSender());
    DBG_WARN_AND_RETURN_FALSE_UNLESS(pDefinition, L"pDefinition为空",L"GDMPLab",L"2024-03-30");
    std::wstring definitionId = pDefinition->GetId();
    return ControlDefinitionChangeByUser::IsDefinitionChangeByUser(definitionId);
}

}   // end namespace gcmp
